คุณไม่จำเป็นต้องใช้ AI เพียงแค่ pdfplumber ก็พอ
Table of Contents
ตั้งแต่มี LLM อย่าง ChatGPT, Claude หรือ Gemini เกิดขึ้นมาบนโลก การทำ data extraction จาก PDF ก็กลายเป็นงานง่ายๆ หลายคนก็เอามันไปจับยัดใส่ workflow ของตัวเองเพื่อทำให้ชีวิตง่ายขึ้น เช่น อ่านใบแจ้งหนี้หรือใบเสร็จ ดึงตารางออกมาทำเป็น Excel, Google Sheets ไม่ก็ save ลง Database ของตัวเอง
แต่งานพวกนี้มันมีต้นทุนค่า AI ด้วยนี่สิ ไม่ว่ามันจะถูกหรือจะแพงแต่มันมีค่าใช้จ่าย ที่จะโตตามจำนวนเอกสารที่เราอ่านแต่ละวัน วันละ 1-2 ใบก็ไม่เท่าไหร่ ถ้า 100-200 ใบ (ไหนจะ rate limit อีก) แบบนี้ก็น่าคิดแล้วนะ ซี่งคนงกอย่างผมก็ไม่ยอมให้รายจ่ายโตตามจำนวนงานอยู่แล้ว เลยมาดูที่โจทย์ก่อนว่า PDF ที่เราจะจัดการด้วยทุกวันเนี่ยมันเป็นยังไง
PDF แบบใด ที่เราจะลดค่าใช้จ่ายจาก AI ได้บ้าง #
หลักๆ ถ้าเราสังเกต PDF มันจะมีอยู่ 2 แบบคือ
- แบบที่มี Text Layer - คือ แบบที่ลาก select text หรือ highlight ได้เลย เพราะมันมีข้อความฝังอยู่ในไฟล์อยู่แล้ว (พวกที่ export มาจาก Word, Excel หรือพวกโปรแกรมสร้างเอกสารต่างๆ)
- แบบที่ไม่มี Text Layer - คือ แบบที่มีแต่รูปภาพ ไม่มี text ให้ select ได้ หรือพวกที่เป็นเอกสาร scan มานั่นแหละ
ซึ่งงานผมดันโชคดี มีแต่แบบที่ 1 คือมี Text Layer อยู่แล้ว ผมสามารถเขียน code เพื่อดึงข้อมูลออกมาได้ ไม่จำเป็นต้องทำ OCR หรือใช้ AI เพื่อสกัดข้อมูลออกมาจากภาพให้เสียตังค์เยอะกัน
ผมเลยมองหา tool ที่ต้อง “ฟรี” “เบา” ไม่ต้องมี feature AI หรือ OCR จนไปเจอกับ
pdfplumber #
เป็น Python library ที่บอกว่า “Works best on machine-generated, rather than scanned” (ตรงความต้องการเป๊ะ)
แล้วมันทำอะไรได้บ้าง #
- Extract ข้อความได้ มาพร้อมกับ bounding box ทำให้รู้ตำแหน่งของ text ได้เลย (เผื่อเอาไปใช้วิเคราะห์ต่อ)
- Extract table ได้ อันนี้ของดีผมบอกเลย ชีวิตเราจะง่ายขึ้น เขาจะช่วย detect structure ของ table ให้เลย โดยที่เราไม่ต้องเขียนเอง (แต่ก็สามารถ fine-tune ได้ด้วยนะ)
ตัวอย่างการใช้งาน #
การใช้งานไม่มีอะไรมาก แค่ import pdfplumber เปิดไฟล์ แล้วก็ extract_text() หรือ extract_table() ได้เลย แบบนี้
import pdfplumber
with pdfplumber.open("invoice.pdf") as pdf:
first_page = pdf.pages[0]
# Extract ข้อความ
text = first_page.extract_text()
# Extract ตาราง
table = first_page.extract_table()
นอกจากง่ายแล้ว มันก็ยังเร็วด้วย เพราะถ้าเป็น AI ก็รอ generate ไปเลยครับ หน้านึงไม่ต่ำกว่า 3 วินาทีแน่นอน แถมยัง
License และความพร้อมใช้งาน #
MIT License ที่แปลว่า:
- ใช้ฟรี แม้จะเป็น commercial
- modify ได้ตามต้องการ
แล้วก็รองรับตั้งแต่ Python 3.8 - 3.11 มี update ล่าสุดเมื่อ 4 เดือนที่แล้ว ยังไม่ร้าง ใช้ได้ไม่น่าห่วง
อ่านเพิ่มเติม #
- pdfplumber GitHub Repository
- สำหรับใครที่ใช้แล้วอยาก fine-tune table detection ลองไปอ่าน blog นี้ ได้ครับ
สรุป #
การมาของ AI มันช่วยให้เราทำงานได้ง่ายก็จริง แต่ AI ไม่ใช่คำตอบเดียว บางครั้งการเลือกเครื่องมือที่เหมาะกับงานมันก็จะช่วยประหยัดทั้งเวลา (execution time) และเงินได้ด้วยเน่อ
จริงๆยังมีเครื่องมืออีกหลายตัวเช่น Docling, PyMuPDF และอื่นๆ แต่ด้วยเงื่อนไขต่างๆ ผมลงตัวกับ pdfplumber ที่สุด ถ้าใครมีตัวอื่นที่เล็ก เบา เร็ว แรง กว่านี้มาแลกเปลี่ยนกันได้ครับ ไม่จำเป็นต้อง Python ก็ได้ครับ
เราจะประหยัดไปด้วยกัน! 💰